1. Field of the Invention
This invention is related generally to logic circuits and more particularly to those performing boolean operations and data movement.
2. Description of Related Art
Logic circuits performing boolean operations and data movement can be used in a wide range of computer system applications. One such application is reliable data storage using a Redundant Array of Independent or Inexpensive Disks (RAID).
The computer system in a RAID application features a number of disk drives used for fault tolerance and performance, particularly with servers. Some RAID applications provide fault tolerance by performing what is conventionally known as the "RAID algorithm" which involves the compute-intensive task of updating parity information associated with a series of data blocks that are stored in the array of disk drives. Each time new data is to overwrite existing data in the series, a new parity block is computed for the series and also stored in the array. The parity block is generated by partitioning the new data into smaller blocks, and then performing a bitwise exclusive-or (XOR) operation between these new blocks and possibly one or more other existing blocks from the series. These XOR operations continue in this way until all targeted blocks in the series have been XORed with the new blocks, resulting in an updated parity block for the series. The updated parity block and the new data block(s) are then written to the redundant array.
In such a RAID application, a relatively large number of XOR operations are performed because the parity block will need to be generated each time there is a write to the disk array. Accelerating the rate at which these parity blocks are generated can greatly benefit the overall performance of such an application.
The RAID application has typically been implemented in computer systems having an intelligent I/O subsystem. The I/O subsystem may be one which complies with the popular Intelligent I/O (I.sub.2 O.RTM.) interface for Peripheral Components Interconnect (PCI) bus applications. Such a computer is divided into a local bus, a primary PCI bus, and a secondary PCI bus, where the I/O devices normally reside on the secondary PCI bus, the host system resides on the primary PCI bus, and a subsystem processor (e.g., a core processor in an integrated circuit) is coupled to the local bus. The primary and secondary PCI buses are coupled by a bridge. The I/O subsystem typically includes a single integrated circuit die known as an I/O processor (IOP). The salient functions traditionally integrated on the single chip I/O processor include part of the local bus, a core (subsystem) processor, a memory controller, the bridge, and address translation units that are coupled between the local bus and the primary and secondary PCI buses.
A RAID storage application typically has an intelligent agent being, for instance, a disk controller complying with the popular SCSI (Small Computer Systems Interface), that resides on the secondary PCI bus and controls access to the array of disk drives. When the host determines a need to write new data to the array, it notifies the IOP of its need and allows the core processor to take over the task of preparing the new data (normally stored in host memory) for storage in the array. Currently, a software solution for the RAID storage application exists involving the core processor reading the new data, computing the parity block, and writing the parity block to the disk array. This approach, however, may become inadequate with large amounts of data (e.g., larger block size) and with the relatively limited capability of the core processor in current I/O processor designs. A second drawback to this approach is that while the core processor is busy updating the parity block, all of the other tasks of the core processor must be delayed, thus slowing down the overall execution of the storage application.
Therefore, it would be desirable to have a different solution to the problem of generating a parity block, one that helps perform the RAID application more efficiently and expediently.